-
Notifications
You must be signed in to change notification settings - Fork 31
Feat: Getting an agent's status #597
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
WalkthroughAdds a new "Getting an Agent's Status" documentation page, links to it from Build → Validation and several validation TOCs, updates DHT operations and glossary with warrant-related content, fixes anchors/typos in DHT docs, clarifies get/get_links behavior, and adds a markdownlint config. All edits are documentation/config only. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related PRs
Suggested reviewers
Pre-merge checks and finishing touches✅ Passed checks (5 passed)
✨ Finishing touches🧪 Generate unit tests
Tip 👮 Agentic pre-merge checks are now available in preview!Pro plan users can now enable pre-merge checks in their settings to enforce checklists before merging PRs.
Please see the documentation for more information. Example: reviews:
pre_merge_checks:
custom_checks:
- name: "Undocumented Breaking Changes"
mode: "warning"
instructions: |
Pass/fail criteria: All breaking changes to public APIs, CLI flags, environment variables, configuration keys, database schemas, or HTTP/GraphQL endpoints must be documented in the "Breaking Change" section of the PR description and in CHANGELOG.md. Exclude purely internal or private changes (e.g., code not exported from package entry points or explicitly marked as internal).Please share your feedback with us on this Discord post. Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 5
🧹 Nitpick comments (14)
src/pages/_data/navigation/mainNav.json5 (1)
60-60: Navigation entry verified; optional casing nit remains
- Confirmed
src/pages/build/getting-an-agents-status.mdexists with frontmatter
• Title matches:title: "Getting an Agent's Status"- Verified the nav item in
src/pages/_data/navigation/mainNav.json5at line 60 points to/build/getting-an-agents-status/- All existing cross-references in
src/pages/build/*.mdresolve correctly to the new slugOptional nitpick:
- Across your Build docs (e.g.
src/pages/build/dht-operations.md), “DHT operations” sometimes appears as “DHT Operations.” Consider standardizing this casing for consistency.src/pages/build/validation.md (1)
13-13: Fix unordered-list indentation (MD007) for the new bullet.The nested list item is indented by 4 spaces but the linter expects 2. Adjust just this line (and consider normalizing the surrounding items in a follow-up).
- * [Getting an Agent's Status](/build/getting-an-agents-status/) --- checking for invalid actions committed by another agent + * [Getting an Agent's Status](/build/getting-an-agents-status/) --- checking for invalid actions committed by another agentsrc/pages/build/index.md (1)
75-76: Wording/casing consistency nit for the new Validation topic.The description is fine. For consistency with other bullets and the Validation page, consider:
- Using sentence case for link text/description uniformly across the section.
- Optionally aligning the description with the same phrasing used on /build/validation/.
-* [Getting an Agent's Status](/build/getting-an-agents-status/) --- checking for invalid actions committed by another agent +* [Getting an agent's status](/build/getting-an-agents-status/) --- checking for invalid actions committed by another agentIf the site style guide prefers title case in link text, keep the original casing and ignore this suggestion. Please confirm which convention the docs team wants to follow.
src/pages/build/genesis-self-check-callback.md (1)
5-14: Normalize nested list indentation (MD007) in the new “In this section” block.The nested bullets are indented by 4 spaces; the linter expects 2.
* [Validation](/build/validation/) - * `genesis_self_check` Callback (this page) --- writing a function to control access to a network - * [`validate` Callback](/build/validate-callback/) --- basic callback, examples using stub functions - * [`must_get_*` Host Functions](/build/must-get-host-functions/) --- Deterministically retrieving DHT data for use in validation - * [DHT operations](/build/dht-operations/) --- advanced details on the underlying data structure used in DHT replication and validation - * [Getting an Agent's Status](/build/getting-an-agents-status/) --- checking for invalid actions committed by another agent + * `genesis_self_check` Callback (this page) --- writing a function to control access to a network + * [`validate` Callback](/build/validate-callback/) --- basic callback, examples using stub functions + * [`must_get_*` Host Functions](/build/must-get-host-functions/) --- deterministically retrieving DHT data for use in validation + * [DHT operations](/build/dht-operations/) --- advanced details on the underlying data structure used in DHT replication and validation + * [Getting an Agent's Status](/build/getting-an-agents-status/) --- checking for invalid actions committed by another agentNote: also lowercased “Deterministically” mid-sentence.
src/pages/build/dht-operations.md (4)
5-15: Align nested list indentation (MD007) in the new “In this section” block.Same indentation issue as other pages; use 2 spaces for nested bullets.
* [Validation](/build/validation/) - * [`genesis_self_check` Callback](/build/genesis-self-check-callback/) --- writing a function to control access to a network - * [`validate` Callback](/build/validate-callback/) --- basic callback, examples using stub functions - * [`must_get_*` Host Functions](/build/must-get-host-functions/) --- Deterministically retrieving DHT data for use in validation - * DHT operations (this page) --- advanced details on the underlying data structure used in DHT replication and validation - * [Getting an Agent's Status](/build/getting-an-agents-status/) --- checking for invalid actions committed by another agent + * [`genesis_self_check` Callback](/build/genesis-self-check-callback/) --- writing a function to control access to a network + * [`validate` Callback](/build/validate-callback/) --- basic callback, examples using stub functions + * [`must_get_*` Host Functions](/build/must-get-host-functions/) --- deterministically retrieving DHT data for use in validation + * DHT operations (this page) --- advanced details on the underlying data structure used in DHT replication and validation + * [Getting an Agent's Status](/build/getting-an-agents-status/) --- checking for invalid actions committed by another agent
84-85: Fix list indentation for the “Effect” bullet under RegisterDeleteLink (MD007).Indent is 8 spaces; expected 4 for this level.
- * Effect: Mark a link as deleted, without removing the actual data. + * Effect: Mark a link as deleted, without removing the actual data.
69-69: Minor typo: double “the”.“pointing the the entry and action that replace it.”
- * Effect: Mark an entry creation action as being replaced by a new one, pointing the the entry and action that replace it. **An entry and its creation action can have multiple actions updating them.** + * Effect: Mark an entry creation action as being replaced by a new one, pointing to the entry and action that replace it. **An entry and its creation action can have multiple actions updating them.**
86-91: WarrantOp docs link verified; minor nit on ActivityRequest::StatusVerified that the docs.rs URL for WarrantOp resolves successfully (HTTP 200), so the link and entity name are correct.
Two small suggestions to tighten the guidance:
- In the “Warrant operations” section, explicitly call out that using
get_agent_activitywithActivityRequest::Statuswill include warrant operations, so readers know they don’t need a full activity range to retrieve them.- (Optional) Remind readers that warrant operations are system-only—no custom validation code is required.
Relevant location:
- File:
src/pages/build/dht-operations.md(around lines 86–91)src/pages/build/must-get-host-functions.md (1)
5-14: Fix nested list indentation (MD007) in the topic-list block.markdownlint expects a 2-space indent for nested unordered lists. Current items are indented by 4 spaces, which may affect rendering consistency.
Apply this diff:
* [Validation](/build/validation/) - * [`genesis_self_check` Callback](/build/genesis-self-check-callback/) --- writing a function to control access to a network - * [`validate` Callback](/build/validate-callback/) --- basic callback, examples using stub functions - * `must_get_*` Host Functions (this page) --- Deterministically retrieving DHT data for use in validation - * [DHT operations](/build/dht-operations/) --- advanced details on the underlying data structure used in DHT replication and validation - * [Getting an Agent's Status](/build/getting-an-agents-status/) --- checking for invalid actions committed by another agent + * [`genesis_self_check` Callback](/build/genesis-self-check-callback/) --- writing a function to control access to a network + * [`validate` Callback](/build/validate-callback/) --- basic callback, examples using stub functions + * `must_get_*` Host Functions (this page) --- Deterministically retrieving DHT data for use in validation + * [DHT operations](/build/dht-operations/) --- advanced details on the underlying data structure used in DHT replication and validation + * [Getting an Agent's Status](/build/getting-an-agents-status/) --- checking for invalid actions committed by another agentsrc/pages/build/validate-callback.md (1)
5-14: Fix nested list indentation (MD007) in the topic-list block.Use a 2-space indent for the nested bullets to satisfy markdownlint and ensure consistent rendering.
Apply this diff:
* [Validation](/build/validation/) - * [`genesis_self_check` Callback](/build/genesis-self-check-callback/) --- writing a function to control access to a network - * `validate` Callback (this page) --- basic callback, examples using stub functions - * [`must_get_*` Host Functions](/build/must-get-host-functions/) --- Deterministically retrieving DHT data for use in validation - * [DHT operations](/build/dht-operations/) --- advanced details on the underlying data structure used in DHT replication and validation - * [Getting an Agent's Status](/build/getting-an-agents-status/) --- checking for invalid actions committed by another agent + * [`genesis_self_check` Callback](/build/genesis-self-check-callback/) --- writing a function to control access to a network + * `validate` Callback (this page) --- basic callback, examples using stub functions + * [`must_get_*` Host Functions](/build/must-get-host-functions/) --- Deterministically retrieving DHT data for use in validation + * [DHT operations](/build/dht-operations/) --- advanced details on the underlying data structure used in DHT replication and validation + * [Getting an Agent's Status](/build/getting-an-agents-status/) --- checking for invalid actions committed by another agentsrc/pages/resources/glossary.md (1)
933-943: Clarify retrieval and usage: how warrants surface to app code.The definition is solid. Consider adding one sentence linking warrants to retrieval via agent activity to anchor cross-page references.
Apply this diff:
Warrants are not produced for invalid warrants. + +Warrants are retrievable by peers via the agent’s activity authorities (for example, exposed to zome code in the response from `get_agent_activity`), enabling apps to factor them into agent-status checks without querying the entire source chain.src/pages/build/getting-an-agents-status.md (3)
8-14: Fix nested list indentation (MD007) in the topic-list block.Match other pages with a 2-space indent for nested bullets.
Apply this diff:
* [Validation](/build/validation/) - * [`genesis_self_check` Callback](/build/genesis-self-check-callback/) --- writing a function to control access to a network - * [`validate` Callback](/build/validate-callback/) --- basic callback, examples using stub functions - * [`must_get_*` Host Functions](/build/must-get-host-functions/) --- Deterministically retrieving DHT data for use in validation - * [DHT operations](/build/dht-operations/) --- advanced details on the underlying data structure used in DHT replication and validation - * Getting an Agent's Status (this page) --- checking for invalid actions committed by another agent + * [`genesis_self_check` Callback](/build/genesis-self-check-callback/) --- writing a function to control access to a network + * [`validate` Callback](/build/validate-callback/) --- basic callback, examples using stub functions + * [`must_get_*` Host Functions](/build/must-get-host-functions/) --- Deterministically retrieving DHT data for use in validation + * [DHT operations](/build/dht-operations/) --- advanced details on the underlying data structure used in DHT replication and validation + * Getting an Agent's Status (this page) --- checking for invalid actions committed by another agent
126-133: Minor wording: “outside of the scope” → “outside the scope”.Tighten phrasing.
Apply this diff:
-Vulnerabilities like this are outside of the scope of this document; we recommend you get a third-party security audit for any high-risk hApp involving a multi-party agreement process. +Vulnerabilities like this are outside the scope of this document; we recommend a third-party security audit for any high-risk hApp involving a multi-party agreement process.
141-146: Deduplicate references and add ChainStatus reference.Remove the duplicate
ActivityRequestentry; consider adding aChainStatusreference to match the code samples.Apply this diff:
* [`hdk::chain::get_agent_activity`](https://docs.rs/hdk/latest/hdk/chain/fn.get_agent_activity.html) * [`holochain_zome_types::query::ActivityRequest`](https://docs.rs/holochain_zome_types/latest/holochain_zome_types/query/enum.ActivityRequest.html) * [`holochain_zome_types::query::ChainQueryFilter`](https://docs.rs/holochain_zome_types/latest/holochain_zome_types/query/struct.ChainQueryFilter.html) -* [`holochain_zome_types::query::ActivityRequest`](https://docs.rs/holochain_zome_types/latest/holochain_zome_types/query/enum.ActivityRequest.html) * [`holochain_zome_types::query::AgentActivity`](https://docs.rs/holochain_zome_types/latest/holochain_zome_types/query/struct.AgentActivity.html) +* [`holochain_zome_types::query::ChainStatus`](https://docs.rs/holochain_zome_types/latest/holochain_zome_types/query/enum.ChainStatus.html)
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
💡 Knowledge Base configuration:
- MCP integration is disabled by default for public repositories
- Jira integration is disabled by default for public repositories
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (9)
src/pages/_data/navigation/mainNav.json5(1 hunks)src/pages/build/dht-operations.md(2 hunks)src/pages/build/genesis-self-check-callback.md(1 hunks)src/pages/build/getting-an-agents-status.md(1 hunks)src/pages/build/index.md(1 hunks)src/pages/build/must-get-host-functions.md(1 hunks)src/pages/build/validate-callback.md(1 hunks)src/pages/build/validation.md(1 hunks)src/pages/resources/glossary.md(1 hunks)
🧰 Additional context used
🪛 LanguageTool
src/pages/build/index.md
[grammar] ~75-~75: There might be a mistake here.
Context: ...valid actions committed by another agent ::: ## Testing ::: topic-list * [Testi...
(QB_NEW_EN)
src/pages/build/validation.md
[grammar] ~13-~13: There might be a mistake here.
Context: ...valid actions committed by another agent ::: ::: intro Validation gives shape to...
(QB_NEW_EN)
src/pages/build/dht-operations.md
[grammar] ~5-~5: There might be a mistake here.
Context: ...le: "DHT operations" --- ::: topic-list ### In this section {data-no-toc} * [Valida...
(QB_NEW_EN)
[grammar] ~11-~11: There might be a mistake here.
Context: ...etrieving DHT data for use in validation * DHT operations (this page) --- advanced ...
(QB_NEW_EN)
[grammar] ~12-~12: There might be a mistake here.
Context: ...e used in DHT replication and validation * [Getting an Agent's Status](/build/gettin...
(QB_NEW_EN)
[grammar] ~13-~13: There might be a mistake here.
Context: ...valid actions committed by another agent ::: ::: intro An agent receives **DHT o...
(QB_NEW_EN)
src/pages/build/genesis-self-check-callback.md
[grammar] ~5-~5: There might be a mistake here.
Context: ...Self-Check Callback" --- ::: topic-list ### In this section {data-no-toc} * [Valida...
(QB_NEW_EN)
[grammar] ~11-~11: There might be a mistake here.
Context: ...etrieving DHT data for use in validation * DHT operations ...
(QB_NEW_EN)
[grammar] ~12-~12: There might be a mistake here.
Context: ...e used in DHT replication and validation * [Getting an Agent's Status](/build/gettin...
(QB_NEW_EN)
[grammar] ~13-~13: There might be a mistake here.
Context: ...valid actions committed by another agent ::: ::: intro To enforce access control...
(QB_NEW_EN)
src/pages/build/validate-callback.md
[grammar] ~5-~5: There might be a mistake here.
Context: ... "Validate callback" --- ::: topic-list ### In this section {data-no-toc} * [Valida...
(QB_NEW_EN)
[grammar] ~11-~11: There might be a mistake here.
Context: ...etrieving DHT data for use in validation * DHT operations ...
(QB_NEW_EN)
[grammar] ~12-~12: There might be a mistake here.
Context: ...e used in DHT replication and validation * [Getting an Agent's Status](/build/gettin...
(QB_NEW_EN)
[grammar] ~13-~13: There might be a mistake here.
Context: ...valid actions committed by another agent ::: ::: intro The validate callback i...
(QB_NEW_EN)
src/pages/build/getting-an-agents-status.md
[grammar] ~5-~5: There might be a mistake here.
Context: ...g an Agent's Status" --- ::: topic-list ### In this section {data-no-toc} * [Valida...
(QB_NEW_EN)
[grammar] ~11-~11: There might be a mistake here.
Context: ...etrieving DHT data for use in validation * DHT operations ...
(QB_NEW_EN)
[grammar] ~12-~12: There might be a mistake here.
Context: ...e used in DHT replication and validation * Getting an Agent's Status (this page) --...
(QB_NEW_EN)
[grammar] ~13-~13: There might be a mistake here.
Context: ...valid actions committed by another agent ::: ::: intro At certain points in a hA...
(QB_NEW_EN)
[grammar] ~16-~16: There might be a mistake here.
Context: ...ommitted by another agent ::: ::: intro At certain points in a hApp a user may w...
(QB_NEW_EN)
[style] ~24-~24: Consider using a different verb to strengthen your wording.
Context: ...ent_activity.html) host function, which gives information about both chain forks and ...
(GIVE_INFORMATION)
[grammar] ~126-~126: There might be a mistake here.
Context: ... } } ``` !!! info Time-based attacks This approach is still vulnerable to var...
(QB_NEW_EN)
[style] ~132-~132: This phrase is redundant. Consider using “outside”.
Context: ...in fork. Vulnerabilities like this are outside of the scope of this document; we recommen...
(OUTSIDE_OF)
[style] ~132-~132: Using many exclamation marks might seem excessive (in this case: 12 exclamation marks for a text that’s 5345 characters long)
Context: ...olving a multi-party agreement process. !!! ## Query an agent's source chain An a...
(EN_EXCESSIVE_EXCLAMATION)
[grammar] ~149-~149: There might be a mistake here.
Context: ... reading * Core Concepts: Source Chain * [Core Concepts: Validation](/concepts/7_v...
(QB_NEW_EN)
[grammar] ~150-~150: There might be a mistake here.
Context: ...rce_chain/) * Core Concepts: Validation * [Build Guide: DHT Operations: Warrant ope...
(QB_NEW_EN)
src/pages/build/must-get-host-functions.md
[grammar] ~5-~5: There might be a mistake here.
Context: ...et_* Host Functions" --- ::: topic-list ### In this section {data-no-toc} * [Valida...
(QB_NEW_EN)
[grammar] ~11-~11: There might be a mistake here.
Context: ...etrieving DHT data for use in validation * DHT operations ...
(QB_NEW_EN)
[grammar] ~12-~12: There might be a mistake here.
Context: ...e used in DHT replication and validation * [Getting an Agent's Status](/build/gettin...
(QB_NEW_EN)
[grammar] ~13-~13: There might be a mistake here.
Context: ...valid actions committed by another agent ::: ::: intro Successful [validation](/...
(QB_NEW_EN)
🪛 markdownlint-cli2 (0.17.2)
src/pages/build/validation.md
13-13: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
src/pages/build/dht-operations.md
9-9: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
10-10: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
11-11: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
12-12: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
13-13: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
84-84: Unordered list indentation
Expected: 4; Actual: 8
(MD007, ul-indent)
src/pages/build/genesis-self-check-callback.md
9-9: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
10-10: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
11-11: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
12-12: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
13-13: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
src/pages/build/must-get-host-functions.md
9-9: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
10-10: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
11-11: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
12-12: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
13-13: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
🪛 GitHub Check: spellcheck
src/pages/build/getting-an-agents-status.md
[warning] 91-91:
Unknown word (Propsal)
🪛 GitHub Actions: Check spelling
src/pages/build/getting-an-agents-status.md
[warning] 91-91: cspell: Unknown word 'Propsal' detected.
🔇 Additional comments (5)
src/pages/build/must-get-host-functions.md (1)
5-14: Nice addition — cross-page navigation improves discoverability.The “In this section” block aligns with other Validation pages and helps readers follow the flow.
src/pages/build/validate-callback.md (1)
16-18: Intro copy reads well and correctly frames validate’s scope.Clear and accurate description of Op, action/entry context, and dependency handling via must_get_*.
src/pages/build/getting-an-agents-status.md (3)
94-104: Confirm chain filter API: sequence_range + ActionHashTerminated.Method and enum names in
ChainQueryFilter/range types have changed in past releases. Ensuresequence_range(ChainQueryFilterRange::ActionHashTerminated(proposal_hash, 0))compiles for your target HDK; otherwise, substitute the current equivalent.If needed, please paste your HDK version; I can propose an exact, compiling filter snippet.
20-31: Scope and positioning: correct to keep this out of validation callbacks.Good call highlighting non-determinism; this aligns with Acceptance Criteria to focus on agent-status concerns (warrants, forks) rather than general chain queries.
91-95: Typo in return type & HDK API validation needed
- In src/pages/build/getting-an-agents-status.md (lines 91–95), update the return type:
- pub fn is_proposal_currently_good(initiator: AgentPubKey, proposal_hash: ActionHash) -> ExternResult<PropsalStatus> { + pub fn is_proposal_currently_good(initiator: AgentPubKey, proposal_hash: ActionHash) -> ExternResult<ProposalStatus> {- Manually confirm that
ProposalStatus(notPropsalStatus) is the correct enum in your HDK/holochain_zome_types version.- Verify that the helper functions and types—
get_agent_activity,ChainQueryFilter::new(), and any chained filter-builder methods—exist and haven’t changed in your targeted HDK release.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
♻️ Duplicate comments (2)
src/pages/build/getting-an-agents-status.md (2)
28-29: Broken glossary anchor: use “Validation authority”.Replace non-existent “dht-authority” anchor with the defined glossary anchor; also pluralize “authority” per glossary entry.
-A warrant is created for _any_ DHT operation that fails app validation, and sent to the [authority](/resources/glossary/#dht-authority) responsible for the warranted author's [agent ID](/build/identifiers/#agent) address. No warrants are created for chain forks, because a warrant is simply a way of informing other agents of an incident on data they might not be an authority on, and agent ID authorities already watch for chain forks.<!-- TODO: change this language if chain fork warrants become a thing --> +A warrant is created for _any_ DHT operation that fails app validation, and sent to the [validation authorities](/resources/glossary/#validation-authority) responsible for the warranted author's [agent ID](/build/identifiers/#agent) address. No warrants are created for chain forks, because a warrant is simply a way of informing other agents of an incident on data they might not be an authority on, and agent ID authorities already watch for chain forks.<!-- TODO: change this language if chain fork warrants become a thing -->
59-61: Broken glossary anchor in note: “heighbor” → “neighbor”.-However, most authorities with good connectivity to their [neighbors](/resources/glossary/#heighbor) will discover invalid data and chain forks and publish warrants within seconds after the data is published. +However, most authorities with good connectivity to their [neighbors](/resources/glossary/#neighbor) will discover invalid data and chain forks and publish warrants within seconds after the data is published.
🧹 Nitpick comments (6)
src/pages/build/getting-an-agents-status.md (6)
24-25: Minor wording: “provides” reads stronger than “gives”.-You can do this with the [`get_agent_activity`](https://docs.rs/hdk/latest/hdk/chain/fn.get_agent_activity.html) host function, which gives information about both chain forks and collected **warrants** for an agent. +You can do this with the [`get_agent_activity`](https://docs.rs/hdk/latest/hdk/chain/fn.get_agent_activity.html) host function, which provides information about both chain forks and collected **warrants** for an agent.
8-14: Fix nested list indentation (markdownlint MD007).Adjust indentation of the “In this section” nested bullets from 4 to 2 spaces.
* [Validation](/build/validation/) - * [`genesis_self_check` Callback](/build/genesis-self-check-callback/) --- writing a function to control access to a network - * [`validate` Callback](/build/validate-callback/) --- basic callback, examples using stub functions - * [`must_get_*` Host Functions](/build/must-get-host-functions/) --- Deterministically retrieving DHT data for use in validation - * [DHT operations](/build/dht-operations/) --- advanced details on the underlying data structure used in DHT replication and validation - * Getting an Agent's Status (this page) --- checking for invalid actions committed by another agent + * [`genesis_self_check` Callback](/build/genesis-self-check-callback/) --- writing a function to control access to a network + * [`validate` Callback](/build/validate-callback/) --- basic callback, examples using stub functions + * [`must_get_*` Host Functions](/build/must-get-host-functions/) --- Deterministically retrieving DHT data for use in validation + * [DHT operations](/build/dht-operations/) --- advanced details on the underlying data structure used in DHT replication and validation + * Getting an Agent's Status (this page) --- checking for invalid actions committed by another agent
49-56: Rust: simplify status+warrants check with matches! and is_empty().Your tuple pattern works, but this is a bit clearer and avoids magic number 0.
- // The agent is safe if their chain has no forks or invalid data, - // and no other authorities have produced warrants. - if let (ChainStatus::Valid(_), 0) = (agent_state.status, agent_state.warrants.len()) { - return Ok(true); - } - - Ok(false) + // The agent is safe if their chain has no forks or invalid data, + // and no other authorities have produced warrants. + Ok( + matches!(agent_state.status, ChainStatus::Valid(_)) + && agent_state.warrants.is_empty(), + )
116-121: Rust: use is_empty() for idiomatic checks.Small readability wins; also keeps style consistent with the earlier sample.
- if initiator_state.warrants.len() > 0 { + if !initiator_state.warrants.is_empty() { return Ok(ProposalStatus::Invalid); } - if initiator_state.valid_activity.len() == 0 { + if initiator_state.valid_activity.is_empty() { return Ok(ProposalStatus::NotAvailable); }
134-134: Tighten phrasing: “outside the scope”.-Vulnerabilities like this are outside of the scope of this document; we recommend you get a third-party security audit for any high-risk hApp involving a multi-party agreement process. +Vulnerabilities like this are outside the scope of this document; we recommend you get a third-party security audit for any high-risk hApp involving a multi-party agreement process.
141-147: References: remove duplicate ActivityRequest entry (line 146).Avoid duplication; the first ActivityRequest bullet already covers it.
* [`holochain_zome_types::query::ChainQueryFilter`](https://docs.rs/holochain_zome_types/latest/holochain_zome_types/query/struct.ChainQueryFilter.html) -* [`holochain_zome_types::query::ActivityRequest`](https://docs.rs/holochain_zome_types/latest/holochain_zome_types/query/enum.ActivityRequest.html) * [`holochain_zome_types::query::AgentActivity`](https://docs.rs/holochain_zome_types/latest/holochain_zome_types/query/struct.AgentActivity.html)
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
💡 Knowledge Base configuration:
- MCP integration is disabled by default for public repositories
- Jira integration is disabled by default for public repositories
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (1)
src/pages/build/getting-an-agents-status.md(1 hunks)
🧰 Additional context used
🪛 LanguageTool
src/pages/build/getting-an-agents-status.md
[grammar] ~5-~5: There might be a mistake here.
Context: ...g an Agent's Status" --- ::: topic-list ### In this section {data-no-toc} * [Valida...
(QB_NEW_EN)
[grammar] ~11-~11: There might be a mistake here.
Context: ...etrieving DHT data for use in validation * DHT operations ...
(QB_NEW_EN)
[grammar] ~12-~12: There might be a mistake here.
Context: ...e used in DHT replication and validation * Getting an Agent's Status (this page) --...
(QB_NEW_EN)
[grammar] ~13-~13: There might be a mistake here.
Context: ...valid actions committed by another agent ::: ::: intro At certain points in a hA...
(QB_NEW_EN)
[grammar] ~16-~16: There might be a mistake here.
Context: ...ommitted by another agent ::: ::: intro At certain points in a hApp a user may w...
(QB_NEW_EN)
[style] ~24-~24: Consider using a different verb to strengthen your wording.
Context: ...ent_activity.html) host function, which gives information about both chain forks and ...
(GIVE_INFORMATION)
[grammar] ~128-~128: There might be a mistake here.
Context: ... } } ``` !!! info Time-based attacks This approach is still vulnerable to var...
(QB_NEW_EN)
[style] ~134-~134: This phrase is redundant. Consider using “outside”.
Context: ...in fork. Vulnerabilities like this are outside of the scope of this document; we recommen...
(OUTSIDE_OF)
[style] ~134-~134: Using many exclamation marks might seem excessive (in this case: 12 exclamation marks for a text that’s 5347 characters long)
Context: ...olving a multi-party agreement process. !!! ## Query an agent's source chain An a...
(EN_EXCESSIVE_EXCLAMATION)
[grammar] ~151-~151: There might be a mistake here.
Context: ... reading * Core Concepts: Source Chain * [Core Concepts: Validation](/concepts/7_v...
(QB_NEW_EN)
[grammar] ~152-~152: There might be a mistake here.
Context: ...rce_chain/) * Core Concepts: Validation * [Build Guide: DHT Operations: Warrant ope...
(QB_NEW_EN)
🪛 markdownlint-cli2 (0.17.2)
src/pages/build/getting-an-agents-status.md
9-9: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
10-10: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
11-11: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
12-12: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
13-13: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
|
@coderabbitai change your linting rules for Markdown for all PRs in this repository; indentation for bullets should be four spaces, not two. |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain@pdaoust I'll help you configure the markdown linting rules for this repository. Let me fetch the current CodeRabbit configuration information to provide you with accurate guidance on how to set the bullet indentation to 4 spaces instead of 2. 🛠️ Debug Information Gathered @pdaoust Based on the configuration schema, I can see that CodeRabbit uses To configure bullet indentation to use 4 spaces instead of 2 spaces for this repository, you have a few options: Option 1: Create a
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
♻️ Duplicate comments (2)
src/pages/build/dht-operations.md (1)
81-85: Anchor fixed for RegisterDeleteLink — looks good.The link text and anchor now both reference
RegisterDeleteLink. This resolves the prior issue.src/pages/build/getting-an-agents-status.md (1)
24-29: Glossary/anchor corrections look good.The glossary reference now uses
validation-authorityand the warrants intro aligns with the new DHT operations section.
🧹 Nitpick comments (4)
src/pages/build/dht-operations.md (1)
86-91: Warrant operations section is clear; consider tightening cross-references.Optional polish:
- Mention explicitly that
get_agent_activityreturns warrants with eitherActivityRequest::StatusorActivityRequest::Full, to reinforce the retrieval path from here.- Optionally link “basis address” here to the glossary entry for quick recall, since you introduce a new op type.
Suggested minimal tweak:
-There's one final DHT operation type, a [`WarrantOp`](https://docs.rs/holochain_types/latest/holochain_types/warrant/struct.WarrantOp.html). Rather than being produced from an action, it gets produced by a validator when they discover an invalid operation. Its basis address is the public key of the author of the operation, which means warrants get collected on the agent ID address and can be [retrieved with `get_agent_activity`](/build/getting-an-agents-status/). +There's one final DHT operation type, a [`WarrantOp`](https://docs.rs/holochain_types/latest/holochain_types/warrant/struct.WarrantOp.html). Rather than being produced from an action, it gets produced by a validator when they discover an invalid operation. Its basis address is the public key of the author of the operation (the agent's [basis address](/resources/glossary/#basis-address)), which means warrants get collected on the agent ID address and can be retrieved via [`get_agent_activity`](/build/getting-an-agents-status/) using either `ActivityRequest::Status` or `ActivityRequest::Full`.src/pages/build/getting-an-agents-status.md (3)
49-55: Prefer matches! and is_empty() for clarity (and to avoid moving status).Your tuple-pattern works, but
matches!reads clearer and avoids movingagent_state.status.Apply this diff:
- // The agent is safe if their chain has no forks or invalid data, - // and no other authorities have produced warrants. - if let (ChainStatus::Valid(_), 0) = (agent_state.status, agent_state.warrants.len()) { - return Ok(true); - } - - Ok(false) + // The agent is safe if their chain has no forks or invalid data, + // and no other authorities have produced warrants. + Ok( + matches!(agent_state.status, ChainStatus::Valid(_)) + && agent_state.warrants.is_empty() + )
59-61: Avoid time guarantees; soften wording to “typically quickly.”“Within seconds” may overpromise depending on network conditions. Consider hedging to avoid misleading readers.
-However, most authorities with good connectivity to their [neighbors](/resources/glossary/#neighbor) will discover invalid data and chain forks and publish warrants within seconds after the data is published. +However, most authorities with good connectivity to their [neighbors](/resources/glossary/#neighbor) typically discover invalid data and chain forks and publish warrants quickly after the data is published.
108-124: Minor idioms: use is_empty() for collections.No logic issues spotted. Using
is_empty()communicates intent and is idiomatic.- if initiator_state.warrants.len() > 0 { + if !initiator_state.warrants.is_empty() { return Ok(ProposalStatus::Invalid); } - if initiator_state.valid_activity.len() == 0 { + if initiator_state.valid_activity.is_empty() { return Ok(ProposalStatus::NotAvailable); }
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
💡 Knowledge Base configuration:
- MCP integration is disabled by default for public repositories
- Jira integration is disabled by default for public repositories
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (2)
src/pages/build/dht-operations.md(3 hunks)src/pages/build/getting-an-agents-status.md(1 hunks)
🧰 Additional context used
🪛 LanguageTool
src/pages/build/dht-operations.md
[grammar] ~5-~5: There might be a mistake here.
Context: ...le: "DHT operations" --- ::: topic-list ### In this section {data-no-toc} * [Valida...
(QB_NEW_EN)
[grammar] ~11-~11: There might be a mistake here.
Context: ...etrieving DHT data for use in validation * DHT operations (this page) --- advanced ...
(QB_NEW_EN)
[grammar] ~12-~12: There might be a mistake here.
Context: ...e used in DHT replication and validation * [Getting an Agent's Status](/build/gettin...
(QB_NEW_EN)
[grammar] ~13-~13: There might be a mistake here.
Context: ...valid actions committed by another agent ::: ::: intro An agent receives **DHT o...
(QB_NEW_EN)
[grammar] ~82-~82: There might be a mistake here.
Context: ...ors/#define-a-link-type) and action hash * Contents: action <!--TODO: system valida...
(QB_NEW_EN)
src/pages/build/getting-an-agents-status.md
[grammar] ~5-~5: There might be a mistake here.
Context: ...g an Agent's Status" --- ::: topic-list ### In this section {data-no-toc} * [Valida...
(QB_NEW_EN)
[grammar] ~11-~11: There might be a mistake here.
Context: ...etrieving DHT data for use in validation * DHT operations ...
(QB_NEW_EN)
[grammar] ~12-~12: There might be a mistake here.
Context: ...e used in DHT replication and validation * Getting an Agent's Status (this page) --...
(QB_NEW_EN)
[grammar] ~13-~13: There might be a mistake here.
Context: ...valid actions committed by another agent ::: ::: intro At certain points in a hA...
(QB_NEW_EN)
[grammar] ~16-~16: There might be a mistake here.
Context: ...ommitted by another agent ::: ::: intro At certain points in a hApp a user may w...
(QB_NEW_EN)
[style] ~24-~24: Consider using a different verb to strengthen your wording.
Context: ...ent_activity.html) host function, which gives information about both chain forks and ...
(GIVE_INFORMATION)
[grammar] ~128-~128: There might be a mistake here.
Context: ... } } ``` !!! info Time-based attacks This approach is still vulnerable to var...
(QB_NEW_EN)
[style] ~134-~134: Using many exclamation marks might seem excessive (in this case: 12 exclamation marks for a text that’s 5360 characters long)
Context: ...olving a multi-party agreement process. !!! ## Query an agent's source chain An a...
(EN_EXCESSIVE_EXCLAMATION)
[grammar] ~150-~150: There might be a mistake here.
Context: ... reading * Core Concepts: Source Chain * [Core Concepts: Validation](/concepts/7_v...
(QB_NEW_EN)
[grammar] ~151-~151: There might be a mistake here.
Context: ...rce_chain/) * Core Concepts: Validation * [Build Guide: DHT Operations: Warrant ope...
(QB_NEW_EN)
🪛 markdownlint-cli2 (0.17.2)
src/pages/build/dht-operations.md
9-9: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
10-10: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
11-11: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
12-12: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
13-13: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
69-69: Unordered list indentation
Expected: 4; Actual: 8
(MD007, ul-indent)
81-81: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
82-82: Unordered list indentation
Expected: 4; Actual: 8
(MD007, ul-indent)
83-83: Unordered list indentation
Expected: 4; Actual: 8
(MD007, ul-indent)
84-84: Unordered list indentation
Expected: 4; Actual: 8
(MD007, ul-indent)
src/pages/build/getting-an-agents-status.md
9-9: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
10-10: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
11-11: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
12-12: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
13-13: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
🔇 Additional comments (4)
src/pages/build/dht-operations.md (1)
5-14: 4‑space list indentation is fine; ensure the linter is configured to allow it.MD007 warnings are expected here because the list uses 4 spaces. Given the repo preference (4 spaces), confirm
.markdownlint.jsonincludes MD007 with"indent": 4, or that the CI linter is otherwise configured to accept this style.If you want, I can add the config via a follow-up PR.
src/pages/build/getting-an-agents-status.md (3)
5-14: 4‑space list indentation acknowledged; align linter config to avoid MD007 noise.Same note as in dht-operations: if CI runs markdownlint with MD007’s default (2), it will complain. Configure MD007 to
"indent": 4in.markdownlint.jsonto reflect repo convention.
41-47: Confirm current HDK signature/variants in your target Holochain version.The call pattern
get_agent_activity(agent, ChainQueryFilter::new(), ActivityRequest::Status)looks correct. Just a heads-up to verify against the HDK version this doc targets so the snippet doesn’t drift if parameters or enum names change.
96-106: Filter by action hash: confirmChainQueryFilterRange::ActionHashTerminatedsemantics.The intent is clear (ensure the proposal action exists). Double-check the range constructor and the “0” termination offset for the targeted HDK to ensure it selects exactly the action (not a window that could miss or over-include).
If needed, I can propose an alternative using
ChainQueryFilter::action_sequence_rangeor an explicit action hash set once we confirm the current API.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (2)
src/pages/resources/glossary.md (1)
933-942: Consider addressing the long line lengths flagged by markdownlint.While the content updates to the warrant definition are accurate and well-structured, several lines exceed the 80-character limit. Consider breaking longer sentences into multiple lines for better readability and consistency with the project's markdown linting rules.
For example, line 938 could be reformatted:
-The [basis address](#basis-address) of a warrant is the [agent ID](#agent-id) of the author of the invalid operation; hence, it is sent to and collected by the [validation authorities](#validation-authority) responsible for the agent ID basis address. +The [basis address](#basis-address) of a warrant is the [agent ID](#agent-id) of +the author of the invalid operation; hence, it is sent to and collected by the +[validation authorities](#validation-authority) responsible for the agent ID basis address.src/pages/build/getting-an-agents-status.md (1)
152-152: Add missing trailing newline.The file should end with a single newline character to comply with markdown linting rules.
+
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
💡 Knowledge Base configuration:
- MCP integration is disabled by default for public repositories
- Jira integration is disabled by default for public repositories
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (4)
.markdownlint.json(1 hunks)netlify.toml(1 hunks)src/pages/build/getting-an-agents-status.md(1 hunks)src/pages/resources/glossary.md(1 hunks)
✅ Files skipped from review due to trivial changes (1)
- .markdownlint.json
🧰 Additional context used
🪛 markdownlint-cli2 (0.17.2)
src/pages/resources/glossary.md
933-933: Line length
Expected: 80; Actual: 91
(MD013, line-length)
935-935: Line length
Expected: 80; Actual: 103
(MD013, line-length)
936-936: Line length
Expected: 80; Actual: 186
(MD013, line-length)
938-938: Line length
Expected: 80; Actual: 251
(MD013, line-length)
940-940: Line length
Expected: 80; Actual: 217
(MD013, line-length)
src/pages/build/getting-an-agents-status.md
6-6: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Above
(MD022, blanks-around-headings)
9-9: Line length
Expected: 80; Actual: 128
(MD013, line-length)
10-10: Line length
Expected: 80; Actual: 104
(MD013, line-length)
11-11: Line length
Expected: 80; Actual: 132
(MD013, line-length)
12-12: Line length
Expected: 80; Actual: 139
(MD013, line-length)
13-13: Line length
Expected: 80; Actual: 103
(MD013, line-length)
17-17: Line length
Expected: 80; Actual: 348
(MD013, line-length)
22-22: Line length
Expected: 80; Actual: 351
(MD013, line-length)
24-24: Line length
Expected: 80; Actual: 245
(MD013, line-length)
26-26: Line length
Expected: 80; Actual: 231
(MD013, line-length)
28-28: Line length
Expected: 80; Actual: 526
(MD013, line-length)
30-30: Line length
Expected: 80; Actual: 498
(MD013, line-length)
34-34: Line length
Expected: 80; Actual: 311
(MD013, line-length)
59-59: Line length
Expected: 80; Actual: 421
(MD013, line-length)
64-64: Line length
Expected: 80; Actual: 385
(MD013, line-length)
66-66: Line length
Expected: 80; Actual: 315
(MD013, line-length)
92-92: Line length
Expected: 80; Actual: 104
(MD013, line-length)
103-103: Line length
Expected: 80; Actual: 97
(MD013, line-length)
130-130: Line length
Expected: 80; Actual: 269
(MD013, line-length)
131-131: Line length
Expected: 80; Actual: 221
(MD013, line-length)
133-133: Line length
Expected: 80; Actual: 181
(MD013, line-length)
138-138: Line length
Expected: 80; Actual: 221
(MD013, line-length)
152-152: Files should end with a single newline character
(MD047, single-trailing-newline)
🪛 LanguageTool
src/pages/build/getting-an-agents-status.md
[grammar] ~5-~5: There might be a mistake here.
Context: ...g an Agent's Status" --- ::: topic-list ### In this section {data-no-toc} * [Valida...
(QB_NEW_EN)
[grammar] ~11-~11: There might be a mistake here.
Context: ...etrieving DHT data for use in validation * DHT operations ...
(QB_NEW_EN)
[grammar] ~12-~12: There might be a mistake here.
Context: ...e used in DHT replication and validation * Getting an Agent's Status (this page) --...
(QB_NEW_EN)
[grammar] ~13-~13: There might be a mistake here.
Context: ...valid actions committed by another agent ::: ::: intro At certain points in a hA...
(QB_NEW_EN)
[grammar] ~16-~16: There might be a mistake here.
Context: ...ommitted by another agent ::: ::: intro At certain points in a hApp a user may w...
(QB_NEW_EN)
[grammar] ~127-~127: There might be a mistake here.
Context: ... } } ``` !!! info Time-based attacks This approach is still vulnerable to var...
(QB_NEW_EN)
[style] ~133-~133: Using many exclamation marks might seem excessive (in this case: 12 exclamation marks for a text that’s 5662 characters long)
Context: ...olving a multi-party agreement process. !!! ## Query an agent's source chain An a...
(EN_EXCESSIVE_EXCLAMATION)
[grammar] ~149-~149: There might be a mistake here.
Context: ... reading * Core Concepts: Source Chain * [Core Concepts: Validation](/concepts/7_v...
(QB_NEW_EN)
[grammar] ~150-~150: There might be a mistake here.
Context: ...rce_chain/) * Core Concepts: Validation * [Build Guide: DHT Operations: Warrant ope...
(QB_NEW_EN)
🔇 Additional comments (9)
netlify.toml (1)
2-15: LGTM! Netlify link checking plugin properly configured.The plugin configuration is well-structured with appropriate settings for HTML link validation. The Google Fonts URL exclusion in
skipPatternsis a common and necessary workaround for fonts.googleapis.com reliability issues during automated checks.src/pages/resources/glossary.md (1)
935-936: Warrant definition updates align with the new documentation.The simplified warrant conditions and explicit reference to DHT operations are consistent with the new "Getting an Agent's Status" page and the warrant operations section added to DHT operations documentation.
src/pages/build/getting-an-agents-status.md (7)
1-18: LGTM! Well-structured page introduction and navigation.The page header, navigation section, and introduction clearly establish the purpose and context. The glossary link to warrants is correctly formatted.
20-31: Excellent explanation of warrant mechanics and timing considerations.The distinction between warrants for validation failures versus chain forks is clearly explained, and the important note about non-deterministic agent state preventing use in validation callbacks is crucial for developers to understand.
36-56: Rust code example is correct and well-documented.The
is_agent_safe_to_interact_withfunction demonstrates proper usage ofget_agent_activitywithActivityRequest::Status. The boolean logic usingmatches!macro andis_empty()check is appropriate and clearly reflects the safety criteria.
58-60: Important caveat about eventual consistency well-explained.The info box appropriately warns users about the eventual consistency nature of warrants and chain forks while providing realistic expectations about discovery timing.
68-125: Comprehensive proposal validation example with good security considerations.The
is_proposal_currently_goodfunction provides a thorough example of checking for a specific published action. TheProposalStatusenum covers all relevant states, and the logic properly handles different chain statuses and warrant checks.
127-134: Critical security warnings for time-based attacks.The documentation appropriately highlights sophisticated attack vectors and recommends professional security audits for high-risk applications. This is essential guidance for developers working with multi-party agreements.
140-152: Comprehensive reference links and further reading.The reference section provides all relevant API documentation links, and the further reading section creates good cross-connections to related concepts and build guide sections.
ThetaSinner
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think the second code example is entirely valid. It's showing a specific way to use get_agent_activity and although I would ask some questions to really nail down what it's protecting against if I saw that code appear in an app, I would support its addition. If you want some confidence about a given operation and not just an agent's general state, then checking their chain after that specific operation has been validated by at least one authority is a valid thing to do.
I have some general comments, mostly small. My main theme is about chain fork warrants and whether they should be included at this stage. They exist in the types for Holochain but they will only be produced when unstable-warrants is enabled on a Holochain build and we're not planning to change that right now.
|
Something that might be worth adding to this documentation is about blocking:
No blocking is currently implemented but it is really the point of warrants, to exclude the author from the network. I think that'd be worth mentioning in this page at some point. We're still implementing it though so perhaps it's something to do when the details are ready? |
25f7051 to
d266c71
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
src/pages/build/must-get-host-functions.md (2)
28-30: Typo: duplicate “as” in info admonition.Remove the extra word.
-... use an action hash as as a dependency's identifier and retrieve it ... +... use an action hash as a dependency's identifier and retrieve it ...
116-134: Example code: time-window logic is incorrect and will undercount.You add 60s to the current action timestamp and use
take_whilewith>=, which filters for future actions. Use a 60s look-back window and explicit bounds; avoid relying on iterator order.- // The result is a vector of `RegisterAgentActivity`` DHT ops. + // The result is a vector of `RegisterAgentActivity` DHT ops. // Let's convert it into a count of the movie creation actions written in // the last minute. - let take_until_timestamp = action.timestamp().saturating_add(&Duration::new(60, 0)); + let window_start = action.timestamp().saturating_sub(&Duration::new(60, 0)); let movie_entry_def = &EntryType::App(UnitEntryTypes::Movie.try_into()?); let movies_written_within_window = result .iter() // Select only the actions that write a movie entry (this naturally // filters out anything that isn't an entry creation action, because // only they have entry types). Then extract the action data. .filter_map(|o| if o.action.hashed.content.entry_type() == Some(movie_entry_def) { Some(o.action.hashed.content.clone()) } else { None }) - // Next, only take the ones within the spam window. - .take_while(|a| a.timestamp() >= take_until_timestamp) + // Next, only keep the ones within the last-minute window. + .filter(|a| a.timestamp() >= window_start && a.timestamp() <= action.timestamp()) // Finally, count the matching actions. .count();
♻️ Duplicate comments (1)
src/pages/build/dht-operations.md (1)
86-91: Consider breaking the long sentence for better readability.The warrant operations description is comprehensive but the single sentence on Line 88 is quite long (467 characters). Consider splitting it into two sentences for better readability.
-There's one final DHT operation type, a [`WarrantOp`](https://docs.rs/holochain_types/latest/holochain_types/warrant/struct.WarrantOp.html). Rather than being produced from an action, it gets produced by a validator when they discover an invalid operation. Its basis address is the public key of the author of the operation, which means warrants get collected on the agent ID address and can be [retrieved with `get_agent_activity`](/build/getting-an-agents-status/). +There's one final DHT operation type, a [`WarrantOp`](https://docs.rs/holochain_types/latest/holochain_types/warrant/struct.WarrantOp.html). Rather than being produced from an action, it gets produced by a validator when they discover an invalid operation. + +Its basis address is the public key of the author of the operation, which means warrants get collected on the agent ID address and can be [retrieved with `get_agent_activity`](/build/getting-an-agents-status/).
🧹 Nitpick comments (8)
src/pages/build/validation.md (1)
13-13: Line length exceeds MD013; either wrap or codify an exception.If you want to keep single-line bullets in topic-list blocks, prefer handling in markdownlint config (disable MD013 for these blocks). Otherwise, wrap the description to a continuation line.
Optional wrap:
- * [Getting an Agent's Status](/build/getting-an-agents-status/) --- checking for invalid actions committed by another agent + * [Getting an Agent's Status](/build/getting-an-agents-status/) --- checking for invalid + actions committed by another agentsrc/pages/build/index.md (1)
75-75: Keep topic-list bullets under MD013 or handle via repo config.Same note as elsewhere: either wrap the description or disable/enforce exceptions for MD013 in topic-list sections via .markdownlint config.
-* [Getting an Agent's Status](/build/getting-an-agents-status/) --- checking for invalid actions committed by another agent +* [Getting an Agent's Status](/build/getting-an-agents-status/) --- checking for invalid + actions committed by another agentsrc/pages/build/must-get-host-functions.md (2)
6-6: Fix MD022 (headings need blank lines).Add a blank line before and after the “In this section” heading inside the topic-list block.
::: topic-list -### In this section {data-no-toc} + +### In this section {data-no-toc} +
9-13: MD013 long lines in topic-list.Wrap lines or cover via markdownlint config as a project-wide rule for topic-list sections.
src/pages/build/genesis-self-check-callback.md (2)
6-6: Fix MD022 (headings need blank lines).::: topic-list -### In this section {data-no-toc} + +### In this section {data-no-toc} +
61-63: Narrow the Base64 import.Avoid glob; import only what’s needed.
-use base64::*; +use base64::engine::general_purpose::STANDARD as BASE64_STANDARD; +use base64::Engine;And update calls accordingly (e.g.,
BASE64_STANDARD.decode(s)).src/pages/build/validate-callback.md (2)
6-6: Fix MD022 (headings need blank lines).::: topic-list -### In this section {data-no-toc} + +### In this section {data-no-toc} +
9-13: MD013 long lines in topic-list.Wrap or configure markdownlint exceptions for these navigation bullets.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
💡 Knowledge Base configuration:
- MCP integration is disabled by default for public repositories
- Jira integration is disabled by default for public repositories
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (10)
.markdownlint.json(1 hunks)src/pages/_data/navigation/mainNav.json5(1 hunks)src/pages/build/dht-operations.md(3 hunks)src/pages/build/genesis-self-check-callback.md(1 hunks)src/pages/build/getting-an-agents-status.md(1 hunks)src/pages/build/index.md(1 hunks)src/pages/build/must-get-host-functions.md(1 hunks)src/pages/build/validate-callback.md(1 hunks)src/pages/build/validation.md(1 hunks)src/pages/resources/glossary.md(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
- .markdownlint.json
- src/pages/_data/navigation/mainNav.json5
🧰 Additional context used
🪛 LanguageTool
src/pages/build/dht-operations.md
[grammar] ~5-~5: There might be a mistake here.
Context: ...le: "DHT operations" --- ::: topic-list ### In this section {data-no-toc} * [Valida...
(QB_NEW_EN)
[grammar] ~11-~11: There might be a mistake here.
Context: ...etrieving DHT data for use in validation * DHT operations (this page) --- advanced ...
(QB_NEW_EN)
[grammar] ~12-~12: There might be a mistake here.
Context: ...e used in DHT replication and validation * [Getting an Agent's Status](/build/gettin...
(QB_NEW_EN)
[grammar] ~13-~13: There might be a mistake here.
Context: ...valid actions committed by another agent ::: ::: intro An agent receives **DHT o...
(QB_NEW_EN)
[grammar] ~82-~82: There might be a mistake here.
Context: ...ors/#define-a-link-type) and action hash * Contents: action <!--TODO: system valida...
(QB_NEW_EN)
src/pages/build/genesis-self-check-callback.md
[grammar] ~5-~5: There might be a mistake here.
Context: ...Self-Check Callback" --- ::: topic-list ### In this section {data-no-toc} * [Valida...
(QB_NEW_EN)
[grammar] ~11-~11: There might be a mistake here.
Context: ...etrieving DHT data for use in validation * DHT operations ...
(QB_NEW_EN)
[grammar] ~12-~12: There might be a mistake here.
Context: ...e used in DHT replication and validation * [Getting an Agent's Status](/build/gettin...
(QB_NEW_EN)
src/pages/build/getting-an-agents-status.md
[grammar] ~5-~5: There might be a mistake here.
Context: ...g an Agent's Status" --- ::: topic-list ### In this section {data-no-toc} * [Valida...
(QB_NEW_EN)
[grammar] ~11-~11: There might be a mistake here.
Context: ...etrieving DHT data for use in validation * DHT operations ...
(QB_NEW_EN)
[grammar] ~12-~12: There might be a mistake here.
Context: ...e used in DHT replication and validation * Getting an Agent's Status (this page) --...
(QB_NEW_EN)
[grammar] ~13-~13: There might be a mistake here.
Context: ...valid actions committed by another agent ::: ::: intro At certain points in a hA...
(QB_NEW_EN)
[grammar] ~16-~16: There might be a mistake here.
Context: ...ommitted by another agent ::: ::: intro At certain points in a hApp a user may w...
(QB_NEW_EN)
[grammar] ~127-~127: There might be a mistake here.
Context: ... } } } ``` !!! info Time-based attacks This approach is still vulnerable to var...
(QB_NEW_EN)
[style] ~133-~133: Using many exclamation marks might seem excessive (in this case: 12 exclamation marks for a text that’s 5662 characters long)
Context: ...olving a multi-party agreement process. !!! ## Query an agent's source chain An a...
(EN_EXCESSIVE_EXCLAMATION)
[grammar] ~149-~149: There might be a mistake here.
Context: ... reading * Core Concepts: Source Chain * [Core Concepts: Validation](/concepts/7_v...
(QB_NEW_EN)
[grammar] ~150-~150: There might be a mistake here.
Context: ...rce_chain/) * Core Concepts: Validation * [Build Guide: DHT Operations: Warrant ope...
(QB_NEW_EN)
src/pages/build/index.md
[grammar] ~75-~75: There might be a mistake here.
Context: ...valid actions committed by another agent ::: ## Testing ::: topic-list * [Testi...
(QB_NEW_EN)
src/pages/build/must-get-host-functions.md
[grammar] ~5-~5: There might be a mistake here.
Context: ...et_* Host Functions" --- ::: topic-list ### In this section {data-no-toc} * [Valida...
(QB_NEW_EN)
[grammar] ~11-~11: There might be a mistake here.
Context: ...etrieving DHT data for use in validation * DHT operations ...
(QB_NEW_EN)
[grammar] ~12-~12: There might be a mistake here.
Context: ...e used in DHT replication and validation * [Getting an Agent's Status](/build/gettin...
(QB_NEW_EN)
[grammar] ~13-~13: There might be a mistake here.
Context: ...valid actions committed by another agent ::: ::: intro Successful [validation](/...
(QB_NEW_EN)
src/pages/build/validate-callback.md
[grammar] ~5-~5: There might be a mistake here.
Context: ... "Validate callback" --- ::: topic-list ### In this section {data-no-toc} * [Valida...
(QB_NEW_EN)
[grammar] ~11-~11: There might be a mistake here.
Context: ...etrieving DHT data for use in validation * DHT operations ...
(QB_NEW_EN)
[grammar] ~12-~12: There might be a mistake here.
Context: ...e used in DHT replication and validation * [Getting an Agent's Status](/build/gettin...
(QB_NEW_EN)
[grammar] ~13-~13: There might be a mistake here.
Context: ...valid actions committed by another agent ::: ::: intro The validate callback i...
(QB_NEW_EN)
src/pages/build/validation.md
[grammar] ~13-~13: There might be a mistake here.
Context: ...valid actions committed by another agent ::: ::: intro Validation gives shape to...
(QB_NEW_EN)
🪛 markdownlint-cli2 (0.17.2)
src/pages/build/dht-operations.md
6-6: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Above
(MD022, blanks-around-headings)
9-9: Line length
Expected: 80; Actual: 128
(MD013, line-length)
10-10: Line length
Expected: 80; Actual: 104
(MD013, line-length)
11-11: Line length
Expected: 80; Actual: 132
(MD013, line-length)
12-12: Line length
Expected: 80; Actual: 125
(MD013, line-length)
13-13: Line length
Expected: 80; Actual: 127
(MD013, line-length)
69-69: Line length
Expected: 80; Actual: 207
(MD013, line-length)
82-82: Line length
Expected: 80; Actual: 120
(MD013, line-length)
88-88: Line length
Expected: 80; Actual: 467
(MD013, line-length)
90-90: Line length
Expected: 80; Actual: 95
(MD013, line-length)
src/pages/build/genesis-self-check-callback.md
6-6: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Above
(MD022, blanks-around-headings)
9-9: Line length
Expected: 80; Actual: 101
(MD013, line-length)
10-10: Line length
Expected: 80; Actual: 104
(MD013, line-length)
11-11: Line length
Expected: 80; Actual: 132
(MD013, line-length)
12-12: Line length
Expected: 80; Actual: 139
(MD013, line-length)
13-13: Line length
Expected: 80; Actual: 127
(MD013, line-length)
src/pages/build/must-get-host-functions.md
6-6: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Above
(MD022, blanks-around-headings)
9-9: Line length
Expected: 80; Actual: 128
(MD013, line-length)
10-10: Line length
Expected: 80; Actual: 104
(MD013, line-length)
11-11: Line length
Expected: 80; Actual: 109
(MD013, line-length)
12-12: Line length
Expected: 80; Actual: 139
(MD013, line-length)
13-13: Line length
Expected: 80; Actual: 127
(MD013, line-length)
src/pages/build/validate-callback.md
6-6: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Above
(MD022, blanks-around-headings)
9-9: Line length
Expected: 80; Actual: 128
(MD013, line-length)
11-11: Line length
Expected: 80; Actual: 132
(MD013, line-length)
12-12: Line length
Expected: 80; Actual: 139
(MD013, line-length)
13-13: Line length
Expected: 80; Actual: 127
(MD013, line-length)
src/pages/build/validation.md
13-13: Line length
Expected: 80; Actual: 127
(MD013, line-length)
src/pages/resources/glossary.md
933-933: Line length
Expected: 80; Actual: 91
(MD013, line-length)
935-935: Line length
Expected: 80; Actual: 103
(MD013, line-length)
936-936: Line length
Expected: 80; Actual: 186
(MD013, line-length)
938-938: Line length
Expected: 80; Actual: 251
(MD013, line-length)
940-940: Line length
Expected: 80; Actual: 217
(MD013, line-length)
🔇 Additional comments (14)
src/pages/build/validation.md (1)
27-29: Nice forward-looking caveat about automatic blocking.Clear, user-facing note that blocking isn’t implemented yet. Good expectation setting.
src/pages/build/must-get-host-functions.md (1)
148-150: Solid guidance on network costs.Good warning about fetch costs when chaining must_get_*; this helps devs design cheaper validations.
src/pages/build/genesis-self-check-callback.md (1)
27-29: Accurate status note on membership control.Clear that it’s not fully implemented yet; aligns with current platform status.
src/pages/build/validate-callback.md (1)
54-55: Good clarification about Ok(Invalid(...)) vs Err.Prevents misuse of error channel in validation callbacks.
src/pages/build/dht-operations.md (3)
5-14: LGTM! Navigation structure is well-organized.The added topic list provides clear navigation to validation-related documentation, properly linking to the new "Getting an Agent's Status" page.
69-69: LGTM! Typo correction is accurate.The fix changes "pointing the the entry" to "pointing to the entry", correctly removing the duplicate article.
81-81: LGTM! Anchor reference is now correct.The link now correctly points to the
RegisterDeleteLinkvariant instead of the incorrectRegisterCreateLinkanchor.src/pages/resources/glossary.md (1)
933-942: LGTM! Warrant definition improvements are accurate and clear.The updated definition correctly describes warrants as DHT operations and clarifies the conditions under which they are created. The basis address explanation and usage clarification align well with the technical implementation.
src/pages/build/getting-an-agents-status.md (6)
5-14: LGTM! Navigation structure is consistent and comprehensive.The topic list properly integrates the new page within the validation documentation hierarchy and provides clear cross-references to related content.
16-18: LGTM! Introduction is clear and technically accurate.The introduction properly explains the purpose of
get_agent_activityand correctly links to the warrant definition in the glossary.
36-56: LGTM! Code example demonstrates proper agent status checking.The
is_agent_safe_to_interact_withfunction correctly usesget_agent_activitywithActivityRequest::Statusand properly checks both chain status and warrants. The pattern matching and boolean logic are accurate.
58-60: LGTM! Important security consideration is clearly explained.The warning about eventual consistency is crucial for developers to understand the limitations of warrant and chain fork detection.
127-134: LGTM! Security warning addresses real attack vectors.The time-based attack scenarios are well-documented and the recommendation for third-party security audits is appropriate for high-risk applications.
142-151: LGTM! Reference links are comprehensive and accurate.All the referenced API documentation links appear correct and provide good coverage of the related types and functions.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
♻️ Duplicate comments (1)
src/pages/build/dht-operations.md (1)
86-91: Split the WarrantOp paragraph for readability and to avoid causal implication.Break into shorter sentences per prior suggestion; keeps the same meaning while reading cleaner.
-There's one final DHT operation type, a [`WarrantOp`](https://docs.rs/holochain_types/latest/holochain_types/warrant/struct.WarrantOp.html). Rather than being produced from an action, it gets produced by a validator when they discover an invalid operation. Its basis address is the public key of the author of the operation, which means warrants get collected on the agent ID address. Warrants can be [retrieved with `get_agent_activity`](/build/getting-an-agents-status/). +There's one final DHT operation type, a [`WarrantOp`](https://docs.rs/holochain_types/latest/holochain_types/warrant/struct.WarrantOp.html). +It's produced by validators when they discover an invalid operation. Its basis address is the public key of the operation's author, so warrants are collected on the agent ID address. Warrants can be [retrieved with `get_agent_activity`](/build/getting-an-agents-status/).
🧹 Nitpick comments (3)
src/pages/build/dht-operations.md (3)
5-14: Add a blank line before the heading inside the topic-list block to satisfy MD022.This removes the “Headings should be surrounded by blank lines” warning on Line 6.
::: topic-list + ### In this section {data-no-toc}
69-69: Tiny grammar tweak for clarity.“replace it” refers to two nouns (“entry and action”); switch to “replace them.”
- * Effect: Mark an entry creation action as being replaced by a new one, pointing to the entry and action that replace it. **An entry and its creation action can have multiple actions updating them.** + * Effect: Mark an entry creation action as being replaced by a new one, pointing to the entry and action that replace them. **An entry and its creation action can have multiple actions updating them.**
9-13: Optional: address MD013 long-line warnings or disable the rule for docs pages.Either wrap these long list items with proper continuation indentation, or disable MD013 in your markdownlint config for this repo/content type. Given the number of links, disabling MD013 here is reasonable.
Would you like a PR snippet for .markdownlint.json to disable MD013 (or limit it just under src/pages/)?
Also applies to: 82-82, 84-84
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
src/pages/build/dht-operations.md(3 hunks)src/pages/build/getting-an-agents-status.md(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
- src/pages/build/getting-an-agents-status.md
🧰 Additional context used
🪛 markdownlint-cli2 (0.17.2)
src/pages/build/dht-operations.md
6-6: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Above
(MD022, blanks-around-headings)
9-9: Line length
Expected: 80; Actual: 128
(MD013, line-length)
10-10: Line length
Expected: 80; Actual: 104
(MD013, line-length)
11-11: Line length
Expected: 80; Actual: 132
(MD013, line-length)
12-12: Line length
Expected: 80; Actual: 139
(MD013, line-length)
13-13: Line length
Expected: 80; Actual: 103
(MD013, line-length)
82-82: Line length
Expected: 80; Actual: 394
(MD013, line-length)
84-84: Line length
Expected: 80; Actual: 269
(MD013, line-length)
🔇 Additional comments (3)
src/pages/build/dht-operations.md (3)
59-59: StoreEntry anchor looks good.The explicit {#storeentry} anchor will help stable intra-page linking.
64-67: Update/RegisterUpdate anchors look good.The {#update} and {#registerupdate} anchors align with the linked variants.
81-84: RegisterDeleteLink anchor fix is correct.The anchor now targets variant.RegisterDeleteLink; good catch and fix.
ThetaSinner
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is looking good. I have a small number of minor comments.
I didn't find it that easy to track the diffs for this one because it appeared that some things were modified more than once. I've re-reviewed the whole change to make sure I'm reading the latest content and hopefully responding with useful comments.
|
Thanks!
sorry, yeah, some of the feedback necessitated some rather extensive rewrites, and I'm sure they overlapped on each other. |
927d392 to
c7ce2e6
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 3
♻️ Duplicate comments (1)
src/pages/build/getting-an-agents-status.md (1)
24-24: Fix broken glossary anchor: use “validation-authority”.The glossary doesn’t define “dht-authority”. Link to the existing “Validation authority” entry.
-In a network where all agents are [authorities](/resources/glossary/#dht-authority) for the full DHT, all invalid data will eventually be discovered by everyone, and their Holochain conductors will automatically block the bad actor at the network level. In a sharded network, discovery of bad actors happens instead through the publishing and discovery of [**warrants**](/resources/glossary/#warrant). +In a network where all agents are [validation authorities](/resources/glossary/#validation-authority) for the full DHT, all invalid data will eventually be discovered by everyone, and their Holochain conductors will automatically block the bad actor at the network level. In a sharded network, discovery of bad actors happens instead through the publishing and discovery of [**warrants**](/resources/glossary/#warrant).
🧹 Nitpick comments (5)
src/pages/resources/glossary.md (2)
942-942: Clarify sentence: “invalid warrants.”Small wording tweak improves precision.
-Warrants are not produced for invalid warrants. +Warrants are not produced in response to invalid warrants.
933-942: Long lines trigger MD013; consider soft-wrapping or disabling per repo policy.If MD013 is enforced, wrap lines to <=80 chars or add a local markdownlint override consistent with your lint config.
src/pages/build/getting-an-agents-status.md (3)
91-104: Derives for extern return type: add Deserialize + Clone.Improves FFI ergonomics and parity with other types; harmless even if not strictly required.
-#[derive(Serialize, Debug)] +#[derive(Serialize, Deserialize, Clone, Debug)] pub enum ProposalStatus {
106-110: Derives for extern input type: add Serialize + Clone.Keeps symmetry with return type and common HDK patterns.
-#[derive(Deserialize, Debug)] +#[derive(Serialize, Deserialize, Clone, Debug)] pub struct IsProposalCurrentlyGoodInput {
174-179: Add trailing newline (MD047).Ends file with a single newline to satisfy markdownlint.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
src/pages/build/getting-an-agents-status.md(1 hunks)src/pages/resources/glossary.md(1 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-09-08T21:51:44.027Z
Learnt from: pdaoust
PR: holochain/docs-pages#597
File: src/pages/build/getting-an-agents-status.md:141-141
Timestamp: 2025-09-08T21:51:44.027Z
Learning: In the holochain_zome_types::query::AgentActivity struct, the correct field name is `valid_activity`, not `valid_actions`. This field contains the valid activities for an agent according to the official Rust documentation.
Applied to files:
src/pages/build/getting-an-agents-status.md
🪛 markdownlint-cli2 (0.17.2)
src/pages/resources/glossary.md
933-933: Line length
Expected: 80; Actual: 91
(MD013, line-length)
935-935: Line length
Expected: 80; Actual: 103
(MD013, line-length)
938-938: Line length
Expected: 80; Actual: 251
(MD013, line-length)
940-940: Line length
Expected: 80; Actual: 217
(MD013, line-length)
src/pages/build/getting-an-agents-status.md
6-6: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Above
(MD022, blanks-around-headings)
9-9: Line length
Expected: 80; Actual: 128
(MD013, line-length)
10-10: Line length
Expected: 80; Actual: 104
(MD013, line-length)
11-11: Line length
Expected: 80; Actual: 132
(MD013, line-length)
12-12: Line length
Expected: 80; Actual: 139
(MD013, line-length)
13-13: Line length
Expected: 80; Actual: 103
(MD013, line-length)
17-17: Line length
Expected: 80; Actual: 353
(MD013, line-length)
22-22: Line length
Expected: 80; Actual: 353
(MD013, line-length)
24-24: Line length
Expected: 80; Actual: 401
(MD013, line-length)
26-26: Line length
Expected: 80; Actual: 467
(MD013, line-length)
31-31: Line length
Expected: 80; Actual: 134
(MD013, line-length)
35-35: Line length
Expected: 80; Actual: 112
(MD013, line-length)
38-38: Line length
Expected: 80; Actual: 419
(MD013, line-length)
40-40: Line length
Expected: 80; Actual: 411
(MD013, line-length)
42-42: Line length
Expected: 80; Actual: 640
(MD013, line-length)
44-44: Line length
Expected: 80; Actual: 424
(MD013, line-length)
46-46: Line length
Expected: 80; Actual: 285
(MD013, line-length)
49-49: Line length
Expected: 80; Actual: 323
(MD013, line-length)
49-49: Link fragments should be valid
(MD051, link-fragments)
49-49: Link fragments should be valid
(MD051, link-fragments)
54-54: Line length
Expected: 80; Actual: 321
(MD013, line-length)
60-60: Line length
Expected: 80; Actual: 91
(MD013, line-length)
79-79: Line length
Expected: 80; Actual: 421
(MD013, line-length)
84-84: Line length
Expected: 80; Actual: 394
(MD013, line-length)
86-86: Line length
Expected: 80; Actual: 269
(MD013, line-length)
117-117: Line length
Expected: 80; Actual: 104
(MD013, line-length)
128-128: Line length
Expected: 80; Actual: 97
(MD013, line-length)
155-155: Line length
Expected: 80; Actual: 274
(MD013, line-length)
157-157: Line length
Expected: 80; Actual: 170
(MD013, line-length)
158-158: Line length
Expected: 80; Actual: 367
(MD013, line-length)
160-160: Line length
Expected: 80; Actual: 156
(MD013, line-length)
165-165: Line length
Expected: 80; Actual: 221
(MD013, line-length)
179-179: Files should end with a single newline character
(MD047, single-trailing-newline)
| A warrant may be used by any peer as legitimate grounds for blocking communication with the [agent](#agent) being warranted.<!-- TODO: update this if warrants ever become used as grounds for scrubbing invalid data --> | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Blocking phrasing contradicts “Blocking isn't operational yet.”
Rephrase to reflect current behavior and avoid promising functionality.
-A warrant may be used by any peer as legitimate grounds for blocking communication with the [agent](#agent) being warranted.<!-- TODO: update this if warrants ever become used as grounds for scrubbing invalid data -->
+A warrant may be used by any peer as legitimate grounds for blocking communication with the [agent](#agent) being warranted; Holochain’s automatic blocking is planned but not yet implemented.<!-- TODO: update this if warrants ever become used as grounds for scrubbing invalid data -->📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| A warrant may be used by any peer as legitimate grounds for blocking communication with the [agent](#agent) being warranted.<!-- TODO: update this if warrants ever become used as grounds for scrubbing invalid data --> | |
| A warrant may be used by any peer as legitimate grounds for blocking communication with the [agent](#agent) being warranted; Holochain’s automatic blocking is planned but not yet implemented.<!-- TODO: update this if warrants ever become used as grounds for scrubbing invalid data --> |
🧰 Tools
🪛 markdownlint-cli2 (0.17.2)
940-940: Line length
Expected: 80; Actual: 217
(MD013, line-length)
🤖 Prompt for AI Agents
In src/pages/resources/glossary.md around lines 940 to 941, the sentence "A
warrant may be used by any peer as legitimate grounds for blocking communication
with the agent being warranted." conflicts with the note that "Blocking isn't
operational yet"; update the phrasing to reflect current behavior (e.g., state
that warrants can be used as grounds for future blocking or for signaling
intent) and avoid implying implemented blocking functionality; keep the wording
concise and conditional (use "may be used in the future" or "could serve as
grounds for blocking once implemented") and remove any language that promises
operational blocking.
3de0237 to
0ad92b7
Compare
|
✔️ 7dab8c8...0ad92b7 - Conventional commits check succeeded. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
♻️ Duplicate comments (2)
src/pages/build/getting-an-agents-status.md (2)
24-26: Broken glossary anchor: use “validation-authority”.The glossary anchor is
#validation-authority, not#dht-authority.-In a network where all agents are [authorities](/resources/glossary/#dht-authority) for the full DHT, +In a network where all agents are [authorities](/resources/glossary/#validation-authority) for the full DHT,
24-36: Avoid contradicting “Blocking isn’t operational yet.”This paragraph says conductors “will automatically block,” but the callout below says blocking isn’t implemented. Rephrase to remove the claim of current automatic blocking.
-In a network where all agents are [authorities](/resources/glossary/#validation-authority) for the full DHT, all invalid data will eventually be discovered by everyone, and their Holochain conductors will automatically block the bad actor at the network level. In a [sharded](/resources/glossary/#sharding) network, however, news of bad actors spreads instead through the publishing and discovery of [**warrants**](/resources/glossary/#warrant). +In a network where all agents are [authorities](/resources/glossary/#validation-authority) for the full DHT, all invalid data will eventually be discovered by everyone. In a [sharded](/resources/glossary/#sharding) network, news of bad actors spreads through the publishing and discovery of [**warrants**](/resources/glossary/#warrant).
🧹 Nitpick comments (5)
src/pages/build/must-get-host-functions.md (1)
5-14: Fix MD022: add a blank line before the heading inside topic-list.markdownlint requires a blank line before “### In this section” when nested. Insert an empty line after the opening
::: topic-list.::: topic-list + ### In this section {data-no-toc} * [Validation](/build/validation/)src/pages/resources/glossary.md (1)
940-941: Clarify current behavior vs future blocking (keep “future‑correct” stance).To avoid confusion with pages that state “Blocking isn’t operational yet,” add a brief note that automatic blocking is planned.
-A warrant may be used by any peer as legitimate grounds for blocking communication with the [agent](#agent) being warranted.<!-- TODO: update this if warrants ever become used as grounds for scrubbing invalid data --> +A warrant may be used by any peer as legitimate grounds for blocking communication with the [agent](#agent) being warranted; automatic blocking by conductors is planned but not yet implemented.<!-- TODO: update this if warrants ever become used as grounds for scrubbing invalid data -->src/pages/build/dht-operations.md (1)
5-14: Fix MD022: add a blank line before the heading inside topic-list.Insert an empty line after
::: topic-listso the heading is surrounded by blanks.::: topic-list + ### In this section {data-no-toc}src/pages/build/getting-an-agents-status.md (1)
5-14: Fix MD022: add a blank line before the heading inside topic-list.Add an empty line after
::: topic-listso the heading is surrounded by blank lines.::: topic-list + ### In this section {data-no-toc}src/pages/build/genesis-self-check-callback.md (1)
5-14: Fix MD022: add a blank line before the heading inside topic-list.Insert an empty line after
::: topic-listso the heading is surrounded by blanks.::: topic-list + ### In this section {data-no-toc}
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (14)
.markdownlint.json(1 hunks)src/pages/_data/navigation/mainNav.json5(1 hunks)src/pages/build/dht-operations.md(3 hunks)src/pages/build/entries.md(2 hunks)src/pages/build/genesis-self-check-callback.md(1 hunks)src/pages/build/getting-an-agents-status.md(1 hunks)src/pages/build/index.md(1 hunks)src/pages/build/links-paths-and-anchors.md(1 hunks)src/pages/build/must-get-host-functions.md(1 hunks)src/pages/build/querying-source-chains.md(1 hunks)src/pages/build/validate-callback.md(1 hunks)src/pages/build/validation.md(1 hunks)src/pages/concepts/2_application_architecture.md(1 hunks)src/pages/resources/glossary.md(1 hunks)
✅ Files skipped from review due to trivial changes (1)
- src/pages/build/validation.md
🚧 Files skipped from review as they are similar to previous changes (7)
- src/pages/_data/navigation/mainNav.json5
- .markdownlint.json
- src/pages/build/validate-callback.md
- src/pages/concepts/2_application_architecture.md
- src/pages/build/links-paths-and-anchors.md
- src/pages/build/index.md
- src/pages/build/entries.md
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2025-09-08T21:51:44.027Z
Learnt from: pdaoust
PR: holochain/docs-pages#597
File: src/pages/build/getting-an-agents-status.md:141-141
Timestamp: 2025-09-08T21:51:44.027Z
Learning: In the holochain_zome_types::query::AgentActivity struct, the correct field name is `valid_activity`, not `valid_actions`. This field contains the valid activities for an agent according to the official Rust documentation.
Applied to files:
src/pages/build/querying-source-chains.mdsrc/pages/build/getting-an-agents-status.md
📚 Learning: 2025-09-11T13:19:23.020Z
Learnt from: pdaoust
PR: holochain/docs-pages#597
File: src/pages/resources/glossary.md:933-939
Timestamp: 2025-09-11T13:19:23.020Z
Learning: In the holochain/docs-pages repository, pdaoust prefers glossary definitions to be "future-correct" rather than strictly reflecting current implementation status, to reduce maintenance burden when features are implemented.
Applied to files:
src/pages/resources/glossary.mdsrc/pages/build/dht-operations.mdsrc/pages/build/getting-an-agents-status.md
🪛 markdownlint-cli2 (0.17.2)
src/pages/build/dht-operations.md
6-6: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Above
(MD022, blanks-around-headings)
src/pages/build/genesis-self-check-callback.md
6-6: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Above
(MD022, blanks-around-headings)
src/pages/build/getting-an-agents-status.md
6-6: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Above
(MD022, blanks-around-headings)
41-41: Link fragments should be valid
(MD051, link-fragments)
83-83: Files should end with a single newline character
(MD047, single-trailing-newline)
src/pages/build/must-get-host-functions.md
6-6: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Above
(MD022, blanks-around-headings)
🔇 Additional comments (2)
src/pages/build/querying-source-chains.md (1)
92-94: LGTM: clarifies status and warrants link.The added cross-link to “Getting an Agent’s Status” is helpful and accurate.
src/pages/build/dht-operations.md (1)
86-91: Verify docs.rs target for WarrantOp.Please confirm the
holochain_types::warrant::WarrantOplink resolves to the correct version for the docs’ supported release.If it differs for your pinned Holochain version, update the crate path or versioned docs URL accordingly.
Closes #537 . Also fixes missing category nav on the tops of all the other pages in the validation category.
NOTE: hold off merging this until 0.6 is the recommended release -- it's got a lot of info about warrants.
Summary by CodeRabbit
Documentation
Bug Fixes
Chores